package com.demo.core.service.base;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.core.model.Feedback;

/**
 * 回复/反馈模型访问服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface FeedbackService extends BaseCoreService<Feedback, Long> {

	/**
	 * 更新回复/反馈类型
	 * 更新： <pre>
	 * 		TITLE, 
	 * 		CONTENT, 
	 * 		SEND_NAME, 
	 * 		SEND_REGION</pre>
	 * @param id 主键ID
	 * @param feedback Feedback
	 */
	void update(Long id, Feedback feedback);
	
	/**
	 * 更新回复/反馈阶段
	 * @param id 主键ID
	 * @param checkStep 审核阶段
	 * @param isChecked 是否审核通过
	 */
	void update(Long id, int checkStep, Boolean isChecked);
	
	/**
	 * 通过Id查询回复/反馈对象
	 * @param id 外键ID
	 * @return Feedback 回复/反馈对象
	 */
	Feedback find(Long id);
	
	/**
	 * 通过站点ID查询站点内支持的所有回复/反馈
	 * @param siteId 站点外键ID
	 * @return List<Feedback> 回复/反馈对象列表
	 */
	List<Feedback> findList(Long siteId);
	
	/**
	 * 通过回复/反馈的外键ID查询该回复/反馈的所属回复/反馈
	 * @param id 回复/反馈外键ID
	 * @param depths 查询树的深度.当前ID的数据作为根向下查询.
	 * 			当前节点深度为0,它的下一结点的深度为1,依次类推
	 * @return Feedback 回复/反馈对象模型
	 */
	Feedback tree(Long id, int... depths);
	
	/**
	 * 通过回复/反馈的外键ID查询该回复/反馈的所有所属回复/反馈
	 * @param id 回复/反馈外键ID
	 * @return Feedback 回复/反馈对象模型
	 */
	Feedback tree(Long id);
	
	/**
	 * 通过站点外键ID分页查询站点所持有的回复/反馈列表
	 * @param siteId 站点外键ID
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return ResultSearchResult<Feedback> 
	 */
	ResultSearchResult<Feedback> search(Long siteId, int firstResult, int maxResults);
	
	/**
	 * 通过站点外键ID分页查询站点所持有的回复/反馈列表
	 * @param siteId 站点外键ID
	 * @param type 反馈类型
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return ResultSearchResult<Feedback> 
	 */
	ResultSearchResult<Feedback> search(Long siteId, String type, int firstResult, int maxResults);
	
	
	/**
	 * 通过站点外键ID分页查询站点所持有的回复/反馈列表
	 * @param siteId 站点外键ID
	 * @param type 反馈类型
	 * @param args SearchArgumentSupport 分页/排序检索模型
	 * @return ResultSearchResult<Feedback> 
	 */
	ResultSearchResult<Feedback> search(Long siteId, String type, SearchArgumentSupport args);
	
}
